<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>借用构造函数继承</title>
</head>

<body>

</body>
<script>
  // 也叫经典继承：在子类的构造函数内部调用父类的构造函数
  // 缺点：父类定义的共享方法不能被子类继承下来

  function Animal(name) {
    this.name = name;
    this.colors = ['red', 'green', 'blue'];
  }
  Animal.prototype.getName = function () {
    return this.name;
  }

  function Dog(name) {
    // 通过 call 改变 this 指向，继承了 Animal
    // 当 new 实例的时候，内部构造函数中this指向了d1，然后在当前构造函数内部再去通过
    // call方法去调用父类构造函数，那么父类的构造函数中的this指向了d1，但是方法不能被继承下来。
    Animal.call(this, name);
  };

  var d1 = new Dog('大黄');
  var d2 = new Dog('小红');

  d1.colors.push('pink');
  console.log(d1.name);  // 大黄
  console.log(d2.name);  // 小红
  console.log(d1.colors);  // ["red", "green", "blue", "pink"]
  console.log(d2.colors);  // ["red", "green", "blue"]
  console.log(d1.getName()) // d1.getName is not a function

</script>

</html>